跳到主要内容

03 🔥点灯

up的视频讲解

先让一个引脚控制一盏灯,再用顺序与延时把四盏灯连接成流水效果。

例程代码: 📥点灯实验代码

1 配置 GPIO 输出​

在 CubeMX 中把 PC13 选择为 GPIO_Output,生成代码并打开工程。

先把引脚切换为输出,再用代码控制它。
先把引脚切换为输出,再用代码控制它。

2 写入点灯代码​

在 main.c 的主循环用户区中,使用下面的代码设置引脚电平:

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,0);

HAL_GPIO_WritePin() 表示写引脚;前两个参数指定端口和引脚,最后的 0 表示输出低电平。本电路的 LED 在相应低电平条件下点亮。

把函数参数与 PC13 的输出状态对应起来。
把函数参数与 PC13 的输出状态对应起来。

3 编译、下载并观察​

完成编译后,把程序下载到开发板,观察 LED 是否按程序设置亮起或熄灭。

通过实际灯光确认输出控制生效。
通过实际灯光确认输出控制生效。

4 从单灯扩展到流水灯​

先配置四路输出​

将四盏 LED 对应的引脚配置为 GPIO 输出,接线与配置按下图对应。

四路 GPIO 的配置。
四路 GPIO 的配置。
确认每盏 LED 对应的引脚。
确认每盏 LED 对应的引脚。

分清各盏灯的有效电平​

不同连接方式可能使 LED 在不同电平下点亮。因此先分别看全灭和全亮的代码,再组织流水顺序。

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,0);//黄灯灭
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,0);//红灯灭
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,1);//蓝灯灭
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,1);//绿灯灭
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1);//黄灯亮
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);//红灯亮
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,0);//蓝灯亮
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,0);//绿灯亮

按顺序点亮,并在中间等待​

流水灯的逻辑是点亮一盏、等待、熄灭,再处理下一盏。通过下面的代码观察点亮顺序与延时的配合。

while (1)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1);//黄灯
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,0);//黄灯
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);//红灯
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,0);//红灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,0);//蓝灯
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,1);//蓝灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,0);//绿灯
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,1);//绿灯
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
}

这节课先关注程序执行顺序与可见结果。基础课将从 GPIO 的内部电路开始,解释为什么这些函数能够控制引脚。